package com.atguigu.gmall.all.controller;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.list.client.ListFeignClient;
import com.atguigu.gmall.model.list.SearchParam;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: zm
 * @Date: 2021/8/19 13:00
 */
@Controller
public class ListController {

    @Autowired
    private ListFeignClient listFeignClient;

    @GetMapping("list.html")
    public String list(SearchParam searchParam, Model model) {

        Result<Map> result = listFeignClient.list(searchParam);

        model.addAllAttributes(result.getData());
        model.addAttribute("searchParam", searchParam);

        // urlParam 参数的设置！主要功能记录当前查询的条件！
        String urlParam = this.makeUrlParam(searchParam);
        model.addAttribute("urlParam", urlParam);

        // 品牌面包屑
        //  品牌面包屑： "品牌： 品牌名称" 品牌Id:品牌名
        String trademarkParam = this.makeTrademarkParam(searchParam.getTrademark());
        model.addAttribute("trademarkParam", trademarkParam);

        // 平台属性面包屑
        List<Map> propsParamList = this.makePropsParamList(searchParam.getProps());
        model.addAttribute("propsParamList", propsParamList);

        //
        Map orderMap = this.makeOrderMap(searchParam.getOrder());
        model.addAttribute("orderMap", orderMap);


        return "list/index";
    }

    //
    private Map makeOrderMap(String order) {
        Map<String, Object> map = new HashMap<>();
        if (!StringUtils.isEmpty(order)) {
            String[] split = order.split(":");
            if (split != null && split.length == 2) {
                map.put("type", split[0]);
                map.put("sort", split[0]);
            }
        } else {
            map.put("type", "1");
            map.put("sort", "desc");
        }
        return map;
    }

    private List<Map> makePropsParamList(String[] props) {
        List<Map> list = new ArrayList<>();
        if (props != null && props.length > 0) {
            for (String prop : props) {
                String[] split = prop.split(":");
                if (split != null && split.length == 3) {
                    Map<String, Object> map = new HashMap<>();
                    map.put("attrId", split[0]);
                    map.put("attrValue", split[1]);
                    map.put("attrName", split[2]);
                    list.add(map);
                }
            }
        }
        return list;
    }

    private String makeTrademarkParam(String trademark) {
        if (!StringUtils.isEmpty(trademark)) {
            String[] split = trademark.split(":");
            if (split != null && split.length == 2) {
                return "品牌:" + split[1];
            }
        }
        return null;
    }

    private String makeUrlParam(SearchParam searchParam) {
        StringBuilder sb = new StringBuilder();
        if (!StringUtils.isEmpty(searchParam.getCategory1Id())) {
            sb.append("category1Id=").append(searchParam.getCategory1Id());
        }

        if (!StringUtils.isEmpty(searchParam.getCategory2Id())) {
            sb.append("category2Id=").append(searchParam.getCategory2Id());
        }

        if (!StringUtils.isEmpty(searchParam.getCategory3Id())) {
            sb.append("category3Id=").append(searchParam.getCategory3Id());
        }

        if (!StringUtils.isEmpty(searchParam.getKeyword())) {
            sb.append("keyword=").append(searchParam.getKeyword());
        }

        String[] props = searchParam.getProps();
        if (props != null && props.length > 0) {
            for (String prop : props) {
                if (sb.length() > 0) sb.append("&props=").append(prop);
            }
        }

        String trademark = searchParam.getTrademark();
        if (!StringUtils.isEmpty(trademark)) {
            if (sb.length() > 0) sb.append("&trademark=").append(trademark);
        }

        return "list.html?" + sb.toString();
    }

    /**
     * 制作urlParam 参数
     *
     * @param searchParam 获取到用户之前通过哪些值进行检索！
     * @return
     */
//    private String makeUrlParam(SearchParam searchParam) {
//
//        StringBuilder sb = new StringBuilder();
//        if (!StringUtils.isEmpty(searchParam.getCategory1Id())) {
//            sb.append("category1Id=").append(searchParam.getCategory1Id());
//        }
//        if (!StringUtils.isEmpty(searchParam.getCategory2Id())) {
//            sb.append("category2Id=").append(searchParam.getCategory2Id());
//        }
//        if (!StringUtils.isEmpty(searchParam.getCategory3Id())) {
//            sb.append("category3Id=").append(searchParam.getCategory3Id());
//        }
//
//        if (!StringUtils.isEmpty(searchParam.getKeyword())) {
//            sb.append("keyword=").append(searchParam.getKeyword());
//        }
//
//        String[] props = searchParam.getProps();
//        if (props != null && props.length > 0) {
//            for (String prop : props) {
//                if (sb.length() > 0) {
//                    sb.append("&props=").append(prop);
//                }
//            }
//        }
//
//        String trademark = searchParam.getTrademark();
//        if (!StringUtils.isEmpty(trademark)) {
//            if (sb.length() > 0) {
//                sb.append("&trademark=").append(trademark);
//            }
//        }
//
//
//        return "list.html?" + sb.toString();
//
//    }
//
//    //  平台属性面包屑： 平台属性名：平台属性值名 : 传入的参数：用户点击的平台属性值过滤props=23:4G:运行内存
//    //  根据前端页面 ： prop.attrId prop.attrValue prop.attrName  | SearchAttr
//    private List<Map> makePropsParamList(String[] props) {
//        List<Map> list = new ArrayList<>();
//        if (props != null && props.length > 0) {
//            for (String prop : props) {
//                String[] split = prop.split(":");
//                if (split != null && split.length == 3) {
//                    HashMap<String, Object> map = new HashMap<>();
//                    map.put("attrId", split[0]);
//                    map.put("attrValue", split[1]);
//                    map.put("attrName", split[2]);
//                    list.add(map);
//                }
//            }
//        }
//        return list;
//    }
//
//
//    //  品牌面包屑： "品牌： 品牌名称" 品牌Id:品牌名
//    private String makeTrademarkParam(String trademark) {
//        if (!StringUtils.isEmpty(trademark)) {
//            String[] split = trademark.split(":");
//            if (split != null && split.length == 2) {
//                return "品牌:" + split[1];
//            }
//        }
//        return null;
//    }
//
//    //  后台存储orderMap： 看做一个map
//    private Map makeOrderMap(String order) {
//        //  orderMap.type 表示按照综合，还是价格进行排序
//        //  orderMap.sort 表示排序方式
//        //  判断 综合 1：asc  或者 1：desc  价格 2：asc 或者 2：desc
//        Map<String, Object> map = new HashMap<>();
//        if (!StringUtils.isEmpty(order)) {
//            String[] split = order.split(":");
//            if (split != null && split.length == 2) {
//                map.put("type", split[0]);
//                map.put("sort", split[1]);
//            }
//        } else {
//            map.put("type", "1");
//            map.put("sort", "desc");
//        }
//
//        return map;
//    }

}
